package com.xac.common.util;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;

import android.os.Environment;
import android.util.Log;

/**
 * 日志的功能操作类 可将日志保存至SD卡
 * 
 * @author frank
 *
 */
public class LogUtil {

	/**
	 * DEBUG级别开关
	 */
	private static final boolean DEBUG = true;

	/**
	 * 是否保存至SD卡
	 */
	private static final boolean SAVE_TO_SD = true;

	/**
	 * 保存LOG日志的目录
	 */
	private static final String SAVE_LOG_DIR_PATH = Environment.getExternalStorageDirectory().getPath() + "/ePlus";

	/**
	 * 保存LOG日志的路径
	 */
	private static final String SAVE_LOG_PATH = Environment.getExternalStorageDirectory().getPath() + "/ePlus/log.txt";

	/**
	 * 日志打印时间Format
	 */
	private static final SimpleDateFormat DATE_FORMAT_NORMAL = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

	/**
	 * 打印错误级(error)日志信息
	 * 
	 * @param tag 日志标签
	 * @param msg 打印信息
	 */
	public static void e(String tag, String msg) {
		if (DEBUG) {
			Log.e(tag, ">>" + msg + "<<");
			if (SAVE_TO_SD) {
				storeLog(tag, msg);
			}
		}
	}
	
	/**
	 * 用于打印普通消息级(information)日志信息
	 * 
	 * @param tag 日志标签
	 * @param msg 打印信息
	 */
	public static void i(String tag, String msg) {
		if (DEBUG) {
			Log.i(tag, ">>" + msg + "<<");
			if (SAVE_TO_SD) {
				storeLog(tag, msg);
			}
		}
	}

	/**
	 * 用于打印调试级(debug)日志信息
	 * 
	 * @param tag 日志标签
	 * @param msg 打印信息
	 */
	public static void d(String tag, String msg) {
		if (DEBUG) {
			Log.d(tag, ">>" + msg + "<<");
			if (SAVE_TO_SD) {
				storeLog(tag, msg);
			}
		}
	}

	/**
	 * 将日志信息保存至SD卡
	 * 
	 * @param tag 日志标签
	 * @param msg 保存的打印信息
	 */
	public static void storeLog(String tag, String msg) {
		if (Environment.getExternalStorageDirectory().exists() && Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
			File fileDir = new File(SAVE_LOG_DIR_PATH);
			// 判断目录是否已经存在
			if (!fileDir.exists()) {
				if (!fileDir.mkdir()) {
					Log.e(tag, "Failed to create directory " + SAVE_LOG_DIR_PATH);
					return;
				}
			}
			
			File file = new File(SAVE_LOG_PATH);
			// 判断日志文件是否已经存在
			if (!file.exists()) {
				try {
					file.createNewFile();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			
			try {
				// 输出
				FileOutputStream fos = new FileOutputStream(file, true);
				PrintWriter out = new PrintWriter(fos);
				out.println(DATE_FORMAT_NORMAL.format(System.currentTimeMillis()) + "  >>" + tag + "<<  " + msg + '\r');
				out.flush();
				out.close();
			} catch (FileNotFoundException e1) {
				e1.printStackTrace();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}
